package com.cango.qutz.web.auth.position.service;

import com.cango.qutz.web.entity.PositionRoleEntity;
import com.cango.framework.base.pagination.PageInfo;
import com.cango.framework.base.pagination.PaginationResult;
import com.cango.qutz.web.entity.PositionEntity;
import com.cango.qutz.web.entity.PositionEntity;
import com.cango.qutz.web.entity.PositionRoleEntity;

import java.util.List;

/**
 * <p>
 * ClassName: IPositionService
 * </p>
 * <p>
 * Description: 岗位Service接口
 * </p>
 * <p>
 * Author: weih
 * </p>
 * <p>
 * Date: 2015-04-01
 * </p>
 */
public interface IPositionService {
    /**
     * <p>
     * Description: 插入岗位
     * </p>
     * 
     * @param position 岗位对象
     * @return
     */
    int insert(PositionEntity position);

    /**
     * <p>
     * Description: 更新岗位
     * </p>
     * 
     * @param position 岗位对象
     * @return
     */
    int update(PositionEntity position);

    /**
     * <p>
     * Description: 删除岗位
     * </p>
     * 
     * @param position 岗位对象
     * @return
     */
    int delete(PositionEntity position);

    /**
     * <p>
     * Description: 根据岗位id查询岗位记录
     * </p>
     * 
     * @return 岗位对象
     */
    PositionEntity queryObjectById(Integer positionId);

    /**
     * <p>
     * Description: 查询岗位记录列表
     * </p>
     * 
     * @param param 岗位对象
     * @return 岗位记录列表
     */
    List<PositionEntity> queryList(Object param);

    /**
     * <p>
     * Description: 分页查询岗位记录列表
     * </p>
     * 
     * @param param 岗位对象
     * @param pageinfo 分页对象
     * @return 分页记录
     */
    PaginationResult<PositionEntity> queryListByPage(PositionEntity param, PageInfo pageinfo);

    /**
     * <p>
     * Description: 查询岗位记录列表
     * </p>
     * 
     * @param param 岗位对象
     * @return 岗位记录列表
     */
    List<PositionEntity> queryPositionListByOrg(PositionEntity param);

    /**
     * 功能描述: <br>
     * 验证岗位代码的唯一性
     *
     * @return 是否唯一
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    boolean validCode(String positionCode);

    /**
     * 功能描述: <br>
     * 根据岗位代码查询岗位信息
     *
     * @param positionCode 岗位代码
     * @return 岗位信息
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    PositionEntity queryPosByCode(String positionCode);

    /**
     * 功能描述: <br>
     * 新增岗位和角色的关联关系
     *
     * @param posRole
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    void savePositionRole(PositionRoleEntity posRole);

    /**
     * 功能描述: <br>
     * 删除岗位与角色的关系
     *
     * @param posRole
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    void deletePositionRole(PositionRoleEntity posRole);

    /**
     * 功能描述: <br>
     * 查询与机构存在关联关系的用户数量
     *
     * @param positionId
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    int queryUserCountByPos(Integer positionId);
}
